/**
 * 前端通用枚举定义
 * 用于替代代码中的魔法字符串，提高代码可维护性
 */

/**
 * 任务状态枚举
 */
export enum TaskStatus {
  /** 待完成 */
  PENDING = 0,
  /** 已完成 */
  COMPLETED = 1,
  /** 已过期 */
  EXPIRED = 2
}

/**
 * 任务状态显示文本映射
 */
export const TaskStatusText = {
  [TaskStatus.PENDING]: '待完成',
  [TaskStatus.COMPLETED]: '已完成',
  [TaskStatus.EXPIRED]: '已过期'
} as const;

/**
 * 统计类型枚举
 */
export enum StatsType {
  /** 周统计 */
  WEEK = 1,
  /** 月统计 */
  MONTH = 2,
  /** 年统计 */
  YEAR = 3,
  /** 全部统计 */
  ALL = 4
}

/**
 * 统计类型显示文本映射
 */
export const StatsTypeText = {
  [StatsType.WEEK]: '本周',
  [StatsType.MONTH]: '本月',
  [StatsType.YEAR]: '本年',
  [StatsType.ALL]: '全部'
} as const;

/**
 * 用户级别枚举
 */
export enum UserLevel {
  /** 新手 */
  NEWBIE = 0,
  /** 青铜 */
  BRONZE = 1,
  /** 白银 */
  SILVER = 2,
  /** 黄金 */
  GOLD = 3,
  /** 钻石 */
  DIAMOND = 4
}

/**
 * 用户级别显示文本映射
 */
export const UserLevelText = {
  [UserLevel.NEWBIE]: '新手',
  [UserLevel.BRONZE]: '青铜',
  [UserLevel.SILVER]: '白银',
  [UserLevel.GOLD]: '黄金',
  [UserLevel.DIAMOND]: '钻石'
} as const;

/**
 * 响应状态码枚举
 */
export enum ResponseCode {
  /** 成功 */
  SUCCESS = '0',
  /** 失败 */
  FAILURE = '1'
}

/**
 * 根据分数获取用户级别
 * @param score 总分数
 * @returns 用户级别
 */
export function getUserLevel(score: number): UserLevel {
  if (score >= 400) return UserLevel.DIAMOND;
  if (score >= 300) return UserLevel.GOLD;
  if (score >= 200) return UserLevel.SILVER;
  if (score >= 100) return UserLevel.BRONZE;
  return UserLevel.NEWBIE;
}

/**
 * 检查是否为有效的任务状态
 * @param status 任务状态
 * @returns 是否为有效状态
 */
export function isValidTaskStatus(status: number): status is TaskStatus {
  return Object.values(TaskStatus).includes(status);
}

/**
 * 检查是否为有效的统计类型
 * @param type 统计类型
 * @returns 是否为有效类型
 */
export function isValidStatsType(type: number): type is StatsType {
  return Object.values(StatsType).includes(type);
}
